import { initMixin } from './init'
import { stateMixin } from './state'
import { renderMixin } from './render'
import { eventsMixin } from './events'
import { lifecycleMixin } from './lifecycle'
import { warn } from '../util/index'

// 参数的传递和处理需要作为一个轨迹
/**
 * 首先是options参数
 * 关注options参数的处理
 *
 */
function Vue (options) {
  if (process.env.NODE_ENV !== 'production' &&
    !(this instanceof Vue)
  ) {
    warn('Vue is a constructor and should be called with the `new` keyword')
  }
  // 此方法的定义是在init.js文件里
  this._init(options)
}
// 至于以下，百度一下，你就明白
/**
 * 11.22日，以下几个方法
 * 乐趣
 */
 // 给Vue原型添加_init方法
initMixin(Vue)
 // 给Vue原型添加一些属性和方法
stateMixin(Vue)
 // 给Vue原型添加$on，$once，$off，$emit方法
eventsMixin(Vue)
 // 给Vue原型添加_update,$forceUpdate,$destroy方法
lifecycleMixin(Vue)
 // 给Vue原型添加$nextTick,_render方法
renderMixin(Vue)

export default Vue
